home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / http_version.nasl < prev    next >
Text File  |  2005-03-31  |  14KB  |  401 lines

  1. #
  2. # Copyright 2000 by Hendrik Scholz <hendrik@scholz.net> 
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6. # This script is based on the webserver detect script from SecuriTeam.
  7. # But this one uses an HTTP 1.0 request :-)
  8. #
  9.  
  10. if(description)
  11. {
  12.  script_id(10107);
  13.  script_version ("$Revision: 1.53 $");
  14.  
  15.  name["english"] = "HTTP Server type and version";
  16.  script_name(english:name["english"]);
  17.  
  18.  desc["english"] = "This detects the HTTP Server's type and version.
  19.  
  20. Solution: Configure your server to use an alternate name like 
  21.     'Wintendo httpD w/Dotmatrix display'
  22. Be sure to remove common logos like apache_pb.gif.
  23. With Apache, you can set the directive 'ServerTokens Prod' to limit
  24. the information emanating from the server in its response headers.
  25.  
  26. Risk factor : Low";
  27.  
  28.  script_description(english:desc["english"]);
  29.  
  30.  summary["english"] = "HTTP Server type and version";
  31.  script_summary(english:summary["english"]);
  32.  
  33.  script_category(ACT_GATHER_INFO);
  34.  
  35.  script_copyright(english:"This script is Copyright (C) 2000 Securiteam / modified by H. Scholz");
  36.  family["english"] = "General";
  37.  script_family(english:family["english"]);
  38.  
  39.  script_dependencie("find_service.nes", "http_login.nasl", "httpver.nasl", "no404.nasl", "www_fingerprinting_hmap.nasl", "webmin.nasl");
  40.  script_require_ports("Services/www", 80);
  41.  exit(0);
  42. }
  43.  
  44. include("http_func.inc");
  45.  
  46. #
  47. # The script code starts here
  48. #
  49. function get_apache_version()
  50. {
  51.  local_var req, soc, r, v;
  52.  
  53.  req = http_get(item:"/nonexistent_please_dont_exist", port:port);
  54.  soc = http_open_socket(port);
  55.  if(!soc) return NULL;
  56.  send(socket:soc, data:req);
  57.  r = egrep(pattern:"<ADDRESS>.*</ADDRESS>", string:http_recv(socket:soc));
  58.  http_close_socket(soc);
  59.  if(!r)
  60.   return NULL;
  61.  
  62.  v = ereg_replace(string:r, pattern:"<ADDRESS>(Apache/[^ ]*).*", replace:"\1");
  63.  if( r == v )
  64.   return NULL;
  65.  else return v;
  66. }
  67.  
  68.  
  69. function get_domino_version()
  70. {
  71.  local_var req, soc, r, v;
  72.  req = http_get(item:"/nonexistentdb.nsf", port:port);
  73.  soc = http_open_socket(port);
  74.  if(!soc) return NULL;
  75.  send(socket:soc, data:req);
  76.  r = egrep(pattern:".*Lotus-Domino .?Release.*", string:http_recv(socket:soc));
  77.  http_close_socket(soc);
  78.  v = NULL;
  79.  if(r != NULL)v = ereg_replace(pattern:".*Lotus-Domino .?Release ([^ <]*).*", replace:"Lotus-Domino/\1", string:r);
  80.  if(r == NULL || v == r )
  81.   {
  82.    if(get_port_state(25))
  83.    {
  84.     soc = open_sock_tcp(25);
  85.     if(soc)
  86.     {
  87.      r = recv_line(socket:soc, length:4096);
  88.      close(soc);
  89.      v = ereg_replace(pattern:".*Lotus Domino .?Release ([^)]*).*", replace:"Lotus-Domino/\1", string:r);
  90.      if( v == r ) 
  91.        return NULL;
  92.      else 
  93.        return v;
  94.     }
  95.    }
  96.   return NULL;
  97.  }
  98.  else
  99.   return v;
  100. }
  101.  
  102.  
  103.  
  104.  port = get_http_port(default:80);
  105.  
  106.  
  107.  if (get_port_state(port))
  108.  {
  109.   soctcp80 = http_open_socket(port);
  110.  
  111.   if (soctcp80)
  112.   {
  113.    data = http_get(item:"/", port:port);
  114.    resultsend = send(socket:soctcp80, data:data);
  115.    resultrecv = http_recv_headers(soctcp80);
  116.    if ("Server: " >< resultrecv)
  117.    {
  118.     svrline = egrep(pattern:"^(DAAP-)?Server:", string:resultrecv);
  119.     svr = ereg_replace(pattern:".*Server: (.*)$", string:svrline, replace:"\1");
  120.     report = string("The remote web server type is :\n\n");
  121.     
  122.     if("Apache" >< svr) {
  123.      if("Apache/" >< svr)report = report + svr + string("\n\nSolution : You can set the directive 'ServerTokens Prod' to limit\nthe information emanating from the server in its response headers.");
  124.      else{
  125.        svr2 = get_apache_version();
  126.       if( svr2 != NULL  )
  127.         {
  128.       report = report + svr2 + string("\n\nThe 'ServerTokens' directive is set to ProductOnly\n",
  129.                       "however we could determine that the version of the remote\n",
  130.                     "server by requesting a non-existent page.\n");
  131.       svrline = string("Server: ", svr2, "\r\n");
  132.       set_kb_item(name:string("www/real_banner/", port), value:svrline);
  133.       if(!get_kb_item("www/banner/" + port))
  134.       {
  135.        set_kb_item(name:"www/banner/" + port, value:svrline);
  136.       }
  137.        }
  138.        else report = report + svr + string("\nand the 'ServerTokens' directive is ProductOnly\nApache does not permit to hide the server type.\n");
  139.      }
  140.     }else{
  141.      if("Lotus-Domino" >< svr)
  142.      {
  143.       if(egrep(pattern:"Lotus-Domino/[1-9]\.[0-9]", string:svr) ) report = report + svr;
  144.       else {
  145.           svr2 = get_domino_version();
  146.     if( svr2 != NULL )
  147.     {
  148.      report = report + svr2 + string("\n\nThe product version is hidden but we could determine it by\n",
  149.                      "requesting a non-existent .nsf file or connecting to port 25\n");
  150.      svrline = string("Server: ", svr2, "\r\n");
  151.      set_kb_item(name:string("www/real_banner/", port), value:svrline);                
  152.      if(!get_kb_item("www/banner/" + port))
  153.       {
  154.        set_kb_item(name:"www/banner/" + port, value:svrline);
  155.       }
  156.     }
  157.      else report = report + svr;
  158.      }
  159.      }
  160.      else 
  161.      {
  162.      report = report + svr;
  163.      if("Microsoft-IIS/" >< svr){
  164.       report = report + string("\n", "Solution : You can use urlscan to change reported server for IIS.");
  165.      }else{
  166.       report = report + string("\n", "Solution : We recommend that you configure (if possible) your web server to return\n", "a bogus Server header in order to not leak information.\n");
  167.      }
  168.      }
  169.     }
  170.     security_note(port:port, data:report);
  171.     
  172.     #
  173.     # put the name of the web server in the KB
  174.     #
  175.     if(egrep(pattern:"^Server:.*Domino.*", string:svrline))
  176.         set_kb_item(name:"www/domino", value:TRUE);
  177.  
  178.     if(egrep(pattern:"^Server:.*Apache.*", string:svrline))
  179.         set_kb_item(name:"www/apache", value:TRUE);
  180.     
  181.     if(egrep(pattern:"^Server:.*Apache.* Tomcat/", string:svrline, icase:1))
  182.         set_kb_item(name:"www/tomcat", value:TRUE);
  183.     
  184.     if(egrep(pattern:"^Server:.*Microsoft.*", string:svrline))
  185.         set_kb_item(name:"www/iis", value:TRUE);
  186.     
  187.     if(egrep(pattern:"^Server:.*Zope.*", string:svrline))
  188.        set_kb_item(name:"www/zope", value:TRUE);
  189.       
  190.     if(egrep(pattern:"^Server:.*CERN.*", string:svrline))
  191.        set_kb_item(name:"www/cern", value:TRUE);
  192.           
  193.     if(egrep(pattern:"^Server:.*Zeus.*", string:svrline))
  194.        set_kb_item(name:"www/zeus", value:TRUE);
  195.        
  196.      if(egrep(pattern:"^Server:.*WebSitePro.*", string:svrline))
  197.        set_kb_item(name:"www/websitepro", value:TRUE);
  198.            
  199.     if(egrep(pattern:"^Server:.*NCSA.*", string:svrline))
  200.         set_kb_item(name:"www/ncsa", value:TRUE);
  201.     
  202.     if(egrep(pattern:"^Server:.*Netscape-Enterprise.*", string:svrline))
  203.         set_kb_item(name:"www/iplanet", value:TRUE);    
  204.         
  205.     if(egrep(pattern:"^Server:.*Netscape-Administrator.*", string:svrline))
  206.         set_kb_item(name:"www/iplanet", value:TRUE);    
  207.  
  208.     if(egrep(pattern:"^Server:.*thttpd/.*", string:svrline))
  209.     set_kb_item(name:"www/thttpd", value:TRUE);
  210.     
  211.     if(egrep(pattern:"^Server:.*WDaemon.*", string:svrline))
  212.     set_kb_item(name:"www/wdaemon", value:TRUE);
  213.  
  214.     if(egrep(pattern:"^Server:.*SAMBAR.*", string:svrline))
  215.     set_kb_item(name:"www/sambar", value:TRUE);
  216.     
  217.     if(egrep(pattern:"^Server:.*IBM-HTTP-Server.*", string:svrline))
  218.     set_kb_item(name:"www/ibm-http", value:TRUE);
  219.  
  220.     if(egrep(pattern:"^Server:.*Alchemy.*", string:svrline))
  221.     set_kb_item(name:"www/alchemy", value:TRUE);
  222.  
  223.     if(egrep(pattern:"^Server:.*Rapidsite/Apa.*", string:svrline))
  224.     set_kb_item(name:"www/apache", value:TRUE);
  225.  
  226.      if(egrep(pattern:"^Server:.*Statistics Server.*", string:svrline))
  227.     set_kb_item(name:"www/statistics-server", value:TRUE);
  228.  
  229.      if(egrep(pattern:"^Server:.*CommuniGatePro.*", string:svrline))
  230.     set_kb_item(name:"www/communigatepro", value:TRUE);
  231.  
  232.      if(egrep(pattern:"^Server:.*Savant.*", string:svrline))
  233.     set_kb_item(name:"www/savant", value:TRUE);
  234.     
  235.      if(egrep(pattern:"^Server:.*StWeb.*", string:svrline))
  236.         set_kb_item(name:"www/stweb", value:TRUE);
  237.  
  238.      if(egrep(pattern:"^Server:.*StWeb.*", string:svrline))
  239.         set_kb_item(name:"www/apache", value:TRUE);
  240.    
  241.      if(egrep(pattern:"^Server:.*Oracle HTTP Server.*", string:svrline))
  242.     set_kb_item(name:"www/OracleApache", value:TRUE);
  243.  
  244.      if(egrep(pattern:"^Server:.*Oracle HTTP Server.*", string:svrline))
  245.         set_kb_item(name:"www/apache", value:TRUE);
  246.  
  247.      if(egrep(pattern:"^Server:.*Stronghold.*", string:svrline))
  248.         set_kb_item(name:"www/stronghold", value:TRUE);
  249.  
  250.      if(egrep(pattern:"^Server:.*Stronghold.*", string:svrline))
  251.         set_kb_item(name:"www/apache", value:TRUE);
  252.  
  253.      if(egrep(pattern:"^Server:.*MiniServ.*", string:svrline))
  254.         set_kb_item(name:"www/miniserv", value:TRUE);
  255.  
  256.      if(egrep(pattern:"^Server:.*vqServer.*", string:svrline))
  257.         set_kb_item(name:"www/vqserver", value:TRUE);
  258.  
  259.      if(egrep(pattern:"^Server:.*VisualRoute.*", string:svrline))
  260.         set_kb_item(name:"www/visualroute", value:TRUE);
  261.  
  262.      if(egrep(pattern:"^Server:.*Squid.*", string:svrline))
  263.         set_kb_item(name:"www/squid", value:TRUE);
  264.  
  265.      if(egrep(pattern:"^Server:.*OmniHTTPd.*", string:svrline))
  266.         set_kb_item(name:"www/omnihttpd", value:TRUE);
  267.  
  268.      if(egrep(pattern:"^Server:.*linuxconf.*", string:svrline))
  269.         set_kb_item(name:"www/linuxconf", value:TRUE);
  270.  
  271.      if(egrep(pattern:"^Server:.*CompaqHTTPServer.*", string:svrline))
  272.         set_kb_item(name:"www/compaq", value:TRUE);
  273.  
  274.      if(egrep(pattern:"^Server:.*WebSTAR.*", string:svrline))
  275.         set_kb_item(name:"www/webstar", value:TRUE);
  276.  
  277.      if(egrep(pattern:"^Server:.*AppleShareIP.*", string:svrline))
  278.         set_kb_item(name:"www/appleshareip", value:TRUE);
  279.  
  280.      if(egrep(pattern:"^Server:.*Jigsaw.*", string:svrline))
  281.         set_kb_item(name:"www/jigsaw", value:TRUE);
  282.  
  283.      if(egrep(pattern:"^Server:.*Resin.*", string:svrline))
  284.         set_kb_item(name:"www/resin", value:TRUE);
  285.  
  286.      if(egrep(pattern:"^Server:.*AOLserver.*", string:svrline))
  287.         set_kb_item(name:"www/aolserver", value:TRUE);
  288.  
  289.      if(egrep(pattern:"^Server:.*IdeaWebServer.*", string:svrline))
  290.         set_kb_item(name:"www/ideawebserver", value:TRUE);
  291.  
  292.      if(egrep(pattern:"^Server:.*FileMakerPro.*", string:svrline))
  293.         set_kb_item(name:"www/filemakerpro", value:TRUE);
  294.  
  295.      if(egrep(pattern:"^Server:.*NetWare-Enterprise-Web-Server.*", string:svrline))
  296.         set_kb_item(name:"www/netware", value:TRUE);
  297.  
  298.      if(egrep(pattern:"^Server:.*Roxen.*", string:svrline))
  299.         set_kb_item(name:"www/roxen", value:TRUE);
  300.  
  301.      if(egrep(pattern:"^Server:.*SimpleServer:WWW.*", string:svrline))
  302.         set_kb_item(name:"www/simpleserver", value:TRUE);
  303.  
  304.      if(egrep(pattern:"^Server:.*Allegro-Software-RomPager.*", string:svrline))
  305.         set_kb_item(name:"www/allegro", value:TRUE);
  306.  
  307.      if(egrep(pattern:"^Server:.*GoAhead-Webs.*", string:svrline))
  308.         set_kb_item(name:"www/goahead", value:TRUE);
  309.  
  310.      if(egrep(pattern:"^Server:.*Xitami.*", string:svrline))
  311.         set_kb_item(name:"www/xitami", value:TRUE);
  312.  
  313.      if(egrep(pattern:"^Server:.*EmWeb.*", string:svrline))
  314.         set_kb_item(name:"www/emweb", value:TRUE);
  315.  
  316.      if(egrep(pattern:"^Server:.*Ipswitch-IMail.*", string:svrline))
  317.         set_kb_item(name:"www/ipswitch-imail", value:TRUE);
  318.  
  319.      if(egrep(pattern:"^Server:.*Netscape-FastTrack.*", string:svrline))
  320.         set_kb_item(name:"www/netscape-fasttrack", value:TRUE);
  321.  
  322.      if(egrep(pattern:"^Server:.*AkamaiGHost.*", string:svrline))
  323.         set_kb_item(name:"www/akamaighost", value:TRUE);
  324.  
  325.      if(egrep(pattern:"^Server:.*[aA]libaba.*", string:svrline))
  326.         set_kb_item(name:"www/alibaba", value:TRUE);
  327.  
  328.      if(egrep(pattern:"^Server:.*tigershark.*", string:svrline))
  329.         set_kb_item(name:"www/tigershark", value:TRUE);
  330.  
  331.      if(egrep(pattern:"^Server:.*Netscape-Commerce.*", string:svrline))
  332.         set_kb_item(name:"www/netscape-commerce", value:TRUE);
  333.  
  334.      if(egrep(pattern:"^Server:.*Oracle_Web_listener.*", string:svrline))
  335.         set_kb_item(name:"www/oracle-web-listener", value:TRUE);
  336.  
  337.      if(egrep(pattern:"^Server:.*Caudium.*", string:svrline))
  338.         set_kb_item(name:"www/caudium", value:TRUE);
  339.  
  340.      if(egrep(pattern:"^Server:.*Communique.*", string:svrline))
  341.         set_kb_item(name:"www/communique", value:TRUE);
  342.  
  343.      if(egrep(pattern:"^Server:.*Cougar.*", string:svrline))
  344.         set_kb_item(name:"www/cougar", value:TRUE);
  345.  
  346.      if(egrep(pattern:"^Server:.*FirstClass.*", string:svrline))
  347.         set_kb_item(name:"www/firstclass", value:TRUE);
  348.  
  349.      if(egrep(pattern:"^Server:.*NetCache.*", string:svrline))
  350.         set_kb_item(name:"www/netcache", value:TRUE);
  351.  
  352.      if(egrep(pattern:"^Server:.*AnWeb.*", string:svrline))
  353.         set_kb_item(name:"www/anweb", value:TRUE);
  354.  
  355.      if(egrep(pattern:"^Server:.*Pi3Web.*", string:svrline))
  356.         set_kb_item(name:"www/pi3web", value:TRUE);
  357.  
  358.      if(egrep(pattern:"^Server:.*TUX.*", string:svrline))
  359.         set_kb_item(name:"www/tux", value:TRUE);
  360.  
  361.      if(egrep(pattern:"^Server:.*Abyss.*", string:svrline))
  362.         set_kb_item(name:"www/abyss", value:TRUE);
  363.  
  364.      if(egrep(pattern:"^Server:.*BadBlue.*", string:svrline))
  365.         set_kb_item(name:"www/badblue", value:TRUE);
  366.  
  367.      if(egrep(pattern:"^Server:.*WebServer 4 Everyone.*", string:svrline))
  368.         set_kb_item(name:"www/webserver4everyone", value:TRUE);
  369.  
  370.      if(egrep(pattern:"^Server:.*KeyFocus Web Server.*", string:svrline))
  371.         set_kb_item(name:"www/KFWebServer", value:TRUE);
  372.  
  373.      if(egrep(pattern:"^Server:.*Jetty.*", string:svrline))
  374.         set_kb_item(name:"www/jetty", value:TRUE);
  375.     
  376.      if(egrep(pattern:"^Server:.*bkhttp/.*", string:svrline))
  377.         set_kb_item(name:"www/BitKeeper", value:TRUE);    
  378.  
  379.      if(egrep(pattern:"^Server:.*CUPS/.*", string:svrline))
  380.         set_kb_item(name:"www/cups", value:TRUE);    
  381.  
  382.      if(egrep(pattern:"^Server:.*WebLogic.*", string:svrline))
  383.          set_kb_item(name:"www/weblogic", value:TRUE);
  384.  
  385.      if(egrep(pattern:"^Server:.*Novell-HTTP-Server.*", string:svrline))
  386.            set_kb_item(name:"www/novell", value:TRUE);
  387.     
  388.      if(egrep(pattern:"^Server:.*theServer/.*", string:svrline))
  389.            set_kb_item(name:"www/theserver", value:TRUE);
  390.  
  391.      if(egrep(pattern:"^Server:.*WWW File Share.*", string:svrline))
  392.         set_kb_item(name:"www/wwwfileshare", value:TRUE);
  393.  
  394.     
  395.    #  if(!egrep(pattern:"^Server:.*", string:svrline))
  396.    #     set_kb_item(name:"www/none", value:TRUE);
  397.    } 
  398.   close(soctcp80);
  399.   }
  400.  }
  401.